# This file is the entry point to configure your own services.
# Files in the packages/ subdirectory configure your dependencies.

# Put parameters here that don't need to change on each machine where the app is deployed
# https://symfony.com/doc/current/best_practices.html#use-parameters-for-application-configuration
parameters:
    uploadDir: '%kernel.project_dir%/public/upload'
    emailGlobal: 'no-reply@messenger.local'
    exceptions:
        Symfony\Component\HttpKernel\Exception\NotFoundHttpException: { code: 404 }
        App\Exception\ChatNotFoundException: {
            code: 404,
            hidden: false # Не скрывает сообщение об исключении (отдает пользователю)
        }
        App\Exception\RequestBodyConvertException: {
            code: 400,
            hidden: false # Не скрывает сообщение об исключении (отдает пользователю)
        }
        App\Exception\UserAlreadyExistsException: {
            code: 409,
            hidden: false # Не скрывает сообщение об исключении (отдает пользователю)
        }
        App\Exception\BlankFormException: {
            code: 409,
            hidden: false # Не скрывает сообщение об исключении (отдает пользователю)
        }
        App\Exception\UploadFileInvalidTypeException: {
            code: 422,
            hidden: false # Не скрывает сообщение об исключении (отдает пользователю)
        }
        App\Exception\InvalidNumberOfMainImagesException: {
            code: 409,
            hidden: false # Не скрывает сообщение об исключении (отдает пользователю)
        }
        App\Exception\ContentNotFoundException: {
            code: 404,
            hidden: false # Не скрывает сообщение об исключении (отдает пользователю)
        }
        App\Exception\ContactAlreadyExistsException: {
            code: 409,
            hidden: false # Не скрывает сообщение об исключении (отдает пользователю)
        }
        App\Exception\ContactNotAllowedException: {
            code: 409,
            hidden: false # Не скрывает сообщение об исключении (отдает пользователю)
        }
        App\Exception\ContactNotFoundException: {
            code: 404,
            hidden: false # Не скрывает сообщение об исключении (отдает пользователю)
        }
        App\Exception\UserNotFoundException: {
            code: 404,
            hidden: false # Не скрывает сообщение об исключении (отдает пользователю)
        }
        App\Exception\MembershipNotFoundException: {
            code: 409,
            hidden: false # Не скрывает сообщение об исключении (отдает пользователю)
        }
        App\Exception\MembershipHasNoRightException: {
            code: 409,
            hidden: false # Не скрывает сообщение об исключении (отдает пользователю)
        }
        App\Exception\MembershipAlreadyExistsException: {
            code: 404,
            hidden: false # Не скрывает сообщение об исключении (отдает пользователю)
        }
        App\Exception\MessageReturnException: {
            code: 404,
            hidden: false # Не скрывает сообщение об исключении (отдает пользователю)
        }
        App\Exception\UserHasNoRightException: {
            code: 409,
            hidden: false # Не скрывает сообщение об исключении (отдает пользователю)
        }
        App\Exception\TimeOutException: {
            code: 422,
            hidden: false # Не скрывает сообщение об исключении (отдает пользователю)
        }
        App\Exception\UserNotVerifiedException: {
            code: 403,
            hidden: false # Не скрывает сообщение об исключении (отдает пользователю)
        }
services:
    # default configuration for services in *this* file
    _defaults:
        autowire: true      # Automatically injects dependencies in your services.
        autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.
        bind:
            bool $isDebug: '%kernel.debug%'
    # makes classes in src/ available to be used as services
    # this creates a service per class whose id is the fully-qualified class name
    App\:
        resource: '../src/'
        exclude:
            - '../src/DependencyInjection/'
            - '../src/Entity/'
            - '../src/Kernel.php'

    # add more service definitions when explicit configuration is needed
    # please note that last definitions always *replace* previous ones

    App\Service\ExceptionHandler\ExceptionMappingResolver:
        arguments: ['%exceptions%']

    App\Listener\ApiExceptionListener:
        tags:
            - { name: kernel.event_listener, event: kernel.exception, priority: 10 }

    App\Listener\ValidationExceptionListener:
        tags:
            - { name: kernel.event_listener, event: kernel.exception, priority: 15 }

    App\Listener\JwtCreatedListener:
        tags:
            - { name: kernel.event_listener, event: lexik_jwt_authentication.on_jwt_created }

    App\Service\UploadService:
        arguments: ['@filesystem','%uploadDir%']

    App\Service\SecurityService:
        arguments: [ '%emailGlobal%' ]